/* 
 * Since 2008 - 2012
 */

package com.hh.bss.talent.dao.impl;

import static com.hh.bss.util.ObjectUtils.isNotEmpty;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.hh.bss.base.BaseHibernateDao;
import com.hh.bss.common.MapObjectRowMapper;
import com.hh.bss.common.page.Page;
import com.hh.bss.talent.dao.CvAttachmentLogDao;
import com.hh.bss.talent.entity.CvAttachment;
import com.hh.bss.talent.entity.CvAttachmentLog;
import com.hh.bss.talent.vo.query.CvAttachmentLogQuery;
import com.hh.bss.talent.vo.query.CvAttachmentQuery;
import com.hh.bss.util.DateHelper;
import com.hh.bss.util.StringHelper;

@Repository
public class CvAttachmentLogDaoImpl extends BaseHibernateDao<CvAttachmentLog,java.lang.Integer>  implements CvAttachmentLogDao<CvAttachmentLog,java.lang.Integer>{

	public Class getEntityClass() {
		return CvAttachmentLog.class;
	}
	
	public Page findPage(CvAttachmentLogQuery query) {
		
		    Class[] os={CvAttachmentLogQuery.class};
    		Class property= org.springframework.beans.BeanUtils.findPropertyType(query.getField_type(), os);
        if (property!=null){
        	 if ("java.lang.String".equals(property.getName())){
	    			
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(),query.getQuery());
	    			
	    		}
	    		else if ("java.lang.Integer".equals(property.getName())){
	    			
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(), StringHelper.parseInteger(query.getQuery(), 0));
	    			
	    		}
	    		else if ("java.lang.Double".equals(property.getName())){
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(), StringHelper.parseDouble(query.getQuery(), 0));
	    		}
	    		else if ("java.util.Date".equals(property.getName())){
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(), DateHelper.toDate(query.getQuery(), DateHelper.DEFAULT_DATE_FORMAT));
	    		}
        }	 
        
        
        StringBuffer sql = new StringBuffer();
		//单独给CC项目的相关职位使用的
		List values = new ArrayList();
		//,['id','cvId','cvName','refId','fileName','creator','createDt','lastModifier','lastModifiedDt','status','fileCreateDt']
		sql.append(" select * from ( ");
		sql.append(" select a.id,a.cv_id cvId,a.ref_id refId,a.creator,a.create_dt createDt,b.type attType,b.name fileName,b.create_dt fileCreateDt,c.cv_name cvName,c.modifier lastModifier,c.modified_dt lastModifiedDt,if(a.creator=c.modifier,'相同','不相同') status ");
	    sql.append(" from cv_attachment_log a ");
	    sql.append(" INNER JOIN  cv_attachment b ON a.ref_id = b.id ");
	    sql.append(" INNER JOIN cv c ON a.cv_id = c.id ");
	    sql.append(" where a.type = 1  ");
	    
		sql.append(" union all ");
		
		sql.append(" select a.id,a.cv_id cvId,a.ref_id refId,a.creator,a.create_dt createDt,case when b.type = 1 then 'JD' when b.type=2 then 'CR' end  attType,'' fileName,b.create_dt fileCreateDt,c.cv_name cvName,c.modifier lastModifier,c.modified_dt lastModifiedDt ,if(a.creator=c.modifier,'相同','不相同') status  ");
		sql.append(" from cv_attachment_log a");
		sql.append(" INNER JOIN  contract_job_cv_jd b ON a.ref_id = b.id ");
		sql.append(" INNER JOIN cv c ON a.cv_id = c.id ");
		sql.append(" where a.type = 2  ");
		sql.append(" ) cvatt ");
		
		sql.append(" where 1=1 ");
		
		if(isNotEmpty(query.getCvId())){
			sql.append(" and cvatt.cvId = ? ");
			values.add(query.getCvId());
		}
		if(isNotEmpty(query.getCvName())){
			sql.append(" and cvatt.cvName like ? ");
			values.add("%"+query.getCvName()+"%");
		}
		if(isNotEmpty(query.getCreator())){
			sql.append(" and cvatt.creator = ? ");
			values.add(query.getCreator());
		}
		if(isNotEmpty(query.getLastModifier())){
			sql.append(" and cvatt.lastModifier = ? ");
			values.add(query.getLastModifier());
		}
		if(isNotEmpty(query.getStatus())){
			sql.append(" and cvatt.status = ? ");
			values.add(query.getStatus());
		}
		if(isNotEmpty(query.getAttType())){
			sql.append(" and cvatt.attType = ? ");
			values.add(query.getAttType());
		}
		if(isNotEmpty(query.getCreateDtBegin())){
			sql.append(" and cvatt.createDt > ? ");
			values.add(query.getCreateDtBegin());
		}
		if(isNotEmpty(query.getCreateDtEnd())){
			sql.append(" and cvatt.createDt <= ? ");
			values.add(DateHelper.add(query.getCreateDtEnd(), DateHelper.DAY, 1)); 
		}
		sql.append(" order by cvatt.createDt desc ");
		//values.add(query.getProjectId());

		return super.getJdbcDao().createPage(sql.toString(),values.toArray(), new MapObjectRowMapper(), query.getPageSize(), query.getPageNumber());
		//return pageQuery(sql2.toString(),query);
	}
}
